package 面向对象初级.HomeWork;

import java.time.LocalDate;

public class MyDate02 {
    /**
     * 5、MyDate日期类-2
     * 声明一个日期类MyDate，
     * 包含属性：年、月、日
     * boolean isLeapYear()：判断是否是闰年
     * String monthName()：根据月份值，返回对应的英语单词
     * int totalDaysOfMonth()：返回这个月的总天数
     * int totalDaysOfYear()：返回这一年的总天数
     * int daysOfTheYear()：返回这一天是当年的第几数
     * 在测试类的main方法中，创建MyDate对象，赋值为当天日期值，调用方法测试。
     */

        private int year;
        private int month;
        private int day;

        public MyDate02(int year, int month, int day) {
            this.year = year;
            this.road(month, day);
        }

        // 判断是否是闰年
        public boolean isLeapYear() {
            return (year % 4 == 0 && year % 100!= 0) || year % 400 == 0;
        }

        // 根据月份值，返回对应的英语单词
        public String monthName() {
            String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
            return months[month - 1];
        }

        // 返回这个月的总天数
        public int totalDaysOfMonth() {
            if (month == 2) {
                if (isLeapYear()) {
                    return 29;
                } else {
                    return 28;
                }
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                return 30;
            } else {
                return 31;
            }
        }

        // 返回这一年的总天数
        public int totalDaysOfYear() {
            if (isLeapYear()) {
                return 366;
            } else {
                return 365;
            }
        }

        // 返回这一天是当年的第几数
        public int daysOfTheYear() {
            LocalDate date = LocalDate.of(year, month, day);
            return date.getDayOfYear();
        }

        private void road(int month, int day) {
            if (month < 1 || month > 12) {
                throw new IllegalArgumentException("Invalid month value");
            }
            int maxDays = totalDaysOfMonth();
            if (day < 1 || day > maxDays) {
                throw new IllegalArgumentException("Invalid day value");
            }
            this.month = month;
            this.day = day;
        }
    }
